package org.luxor.commons.zookeeper.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 分布式锁注解
 *
 * @author Mr.Yan
 */
@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface GlobalLock {

    /**
     * 唯一锁节点 (规则：/locks/包名/方法名/#{keys})
     */
    String[] keys() default "";

    /**
     * 获取锁超时时间（单位：毫秒；-1表示不设超时，一直阻塞直至获取到锁为止）
     * <pre>
     *     结合业务,建议该时间不宜设置过长,特别在并发高的情况下.建议值：3000ms
     * </pre>
     */
    long timeout() default -1;

    /**
     * 获取锁失败，异常码
     */
    int errorCode() default 10101009;

    /**
     * 获取锁失败，异常信息
     */
    String errorMsg() default "获取分布式锁(GlobalLock)失败.";
}
